11 תשובות
תתרגם מאנגלית את המילים multibyte
ואחרי זה תנסה לקשר את זה עם מה שמספרים לך על מחרוזות וקידודים
רמז: תקרא את המשפט הראשון תחת הכותבת utf-8 הרבה פעמים.
עכשיו PHP (עד 5.4) עבדה עם קידוד פנימי של מחרוזות בתור iso-9961 משהו
ככה שכשהיית כותב $x='hi'; הקידוד של המחרוזת הזאת היה הקידוד הזה. strlen יודעת לחשב אורך של מחרוזת שבה כל תו הוא בייט אחד. אם המחרוזת שלך הייתה בנויה בקידוד אחר (שני בייטים לתו) strlen היית חושבת שיש שם שני תווים (כי היא רגילה לבייט פר תו) והיית מקבל תוצאות לא נכונות.
בשביל זה יש הרחבה mb שיודעת לעבוד עם מחרוזות שתופסות יותר מבייט אחד פר תו.
רגע, זה אומר שאני צריך להשתמש בפונקציות של multibyte במקום פונקציות רגילות אם אני משתמש ב-UTF-8?
אוך, לא ראיתי לזה אזכור אפילו בספר מעולה באנגלית ובהמון אתרים. תודה לך. :)
ספר מיועד לרמות שונות.
להסביר למישהו שמתחיל ללמוד מה זה קידוד, ממה הוא מורכב ולמה multibyte
זה משהו שעדיף להימנע ממנו בתחילת הדרך :)
אז אני אשמח נורא אם תמליץ לי על ספר טוב על PHP למתקדמים.
ואני גם ככה קונה עוד שני ספרים (טכנית, זה ליום הולדת P:), אחד PHP למתקדמים והשני OOP למתקדמים. :)
לא מכיר כאלה.
הספר היחידי שהיה לי ב-PHP היה מספיק נורא בשביל לשים אותו בצד :)
לפי דעתי עדיף ללמוד מהאינטרנט כי PHP היא שפה שכל הזמן מתעדכנת . ולכן אחרי חודש חודשיים יכול להיות קטע בספר שהוא לא עדכני ו\או לא יעיל ...
שאלה נוספת בנושא:
אם אני רוצה לבדוק אם אורך של מחרזות שווה (או במקרה אחר - גדול מ-) לאפס (למטרת פילטרים) - זה לא משנה אם אני אשתמש ב-mb_strlen() או ב-strlen(), נכון?
פונקציות הפילטר PHP לא יודעות לבדוק אורך של מחרוזת. לכן את הבדיקה תצטרך לעשות ידנית.
את הבדיקה הידנית אתה תמיד עושה עם mb_* לא משנה מה השורה הבאה בקוד.
תודה רבה אלכס, למדתי גם משהו